Установка SSL-сертификата Let's Encript для кириллического домена на Apache

Материал из ТХАБ.РФ
Версия от 21:32, 25 марта 2017; Админ (обсуждение | вклад) (Настройка автоматического обновления SSL-сертификатов с помощью планировщика corn)

Перейти к: навигация, поиск

Процесс установки описан здесь Установка SSL Lets Encript из командной строки на Nginx

Замечания

  • на 25.03.2017 Let's Encript поддерживает кириллические домены
  • название домена надо вводить Пуникодом
  • почту админа (требуется в процессе регистрации) надо указывать на латинском домене например admsite@yandex.ru, почта вида admin@ИмяДомена.рф пока не принимается.
  • имя сайта пуникодом необходимо будет добавить
  • Добавлять в SSLсертификат домен www.ИмяДомена.рф не стоит, имеет смысл сделать перенаправление на ИмяДомена.рф

Установка

Устанавливаем клиент Let’s Encrypt на сервер

Подключаемся к серверу по SSH. И переходим, например, в домашнюю директорию:

cd /home/

В нее мы установим клиент Let’s Encrypt. Для этого нам понадобится git, если у вас на сервере уже установлен git, то просто выполните следующие команды:

sudo git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

Если у вас не установлен git, то либо установите его следующей командой:

sudo apt-get install git

Либо просто распакуйте zip архив из репозитория GitHub:

wget https://github.com/letsencrypt/letsencrypt/archive/master.zip
unzip master.zip
mv letsencrypt-master letsencrypt
cd letsencrypt

Устанавливаем скачанный клиент letsencrypt, для чего запускаем установочный скрипт:

./letsencrypt-auto --help

После установки клиента letsencrypt, и сопутствующего ПО, в конце появится страница с описанием справки по клиенту letsencrypt.

Все, клиент Let’s Encrypt установлен.

Создаем SSL сертификат для HTTPS протокола на сайт

Перейдем к созданию сертификата Let’s Encrypt. Для этого сначала необходимо остановить веб-сервер Apache:

sudo service apache2 stop

и запустить команду создания SSL сертификата, не забудьте поменять доменное имя site.com на свое.

В процессе создания сертификата, вам предложат ввести электропочту админа (кириллические домены почты пока не поддерживаются так что придётся ввести почту на яндексе), для важных сообщений и для восстановления ключа при необходимости. Далее нужно будет согласиться с лицензионным соглашением.

./letsencrypt-auto certonly --standalone -d site.com -d www.site.com

Для кириллического домена его имя необходимо указать в пуникоде, например так (для сайт.рф -> xn--80aswg.xn--p1ai ):

./letsencrypt-auto certonly --standalone -d xn--80aswg.xn--p1ai -d www.xn--80aswg.xn--p1ai

или если без под домена www:

./letsencrypt-auto certonly --standalone -d xn--80aswg.xn--p1ai

В случае успешного создания сертификата для HTTPS протокола вы соответствующее сообщение.

Созданный SSL сертификат и вся цепочка сохранится по следующему пути:

/etc/letsencrypt/live/site.com/

или для кириллического домена :

/etc/letsencrypt/live/xn--80aswg.xn--p1ai/

Файлы SSL сертификата

В /etc/letsencrypt/live/site.com/ будут следующие файлы:

  • privkey.pem - приватный ключ для сертификата. В Apache он используется в директиве SSLCertificateKeyFile. В Nginx используется в директиве ssl_certificate_key.
  • cert.pem - сертификат сервера. Его требует директива Apache SSLCertificateFile.
  • chain.pem - связка всех сертификатов, которые обслуживаются браузером, за исключением cert.pem. 'Используется [[Apache[[ SSLCertificateChainFile.
  • fullchain.pem - вся связка сертификатов (объединение chain.pem и cert.pem). Используется в Nginx для ssl_certificate.

Вот мы и получили сертификат. Не забудьте запустить Apache:

sudo service apache2 start

Настройка HTTPS (SSL/TLS) в Apache

Откройте файл конфигурации Apache для сайта (обычно это: /etc/apache2/sites-available/ИмяCайта-ssl.conf или /etc/apache2/vhosts/userName/ ) и добавьте следующие строки: , если его нет скопируйте из /etc/apache2/sites-available/ИмяCайта.conf

Добавте в него строки:

SSLEngine on # Включаем SSL
SSLCertificateFile /etc/letsencrypt/live/devreadwrite.com/cert.pem # Путь к файлу сертификата сервера
SSLCertificateKeyFile /etc/letsencrypt/live/devreadwrite.com/privkey.pem # Путь к файлу приватного ключа

Менять расположение файлов не рекомендуется т.к. через 3 месяца их придётся обновлять скриптом,

В итоге получится что-то вроде:

<IfModule mod_ssl.c>
   <VirtualHost _default_:443>
       ServerAdmin #... webmaster@localhost
       DocumentRoot #... /var/www/html
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined

       SSLEngine on
       SSLCertificateFile /etc/letsencrypt/live/devreadwrite.com/cert.pem
       SSLCertificateKeyFile /etc/letsencrypt/live/devreadwrite.com/privkey.pem

       #...
   </VirtualHost>
</IfModule>

Перезапускаем Apache:

service apache2 restart

Перенаправление всех запросов с HTTP на HTTPS

Стандартными средствами Apache 2.4

В файл

/etc/apache2/sites-available/ИмяCайта.conf

Если вы хотите запретить использование HTTP, то самым разумным будет перенаправлять все HTTP запросы к страницам на их HTTPS адрес. Сделаем это с помощью mod_alias. Если он не включён — включаем:

sudo a2enmod alias
sudo service apache2 restart

Затем изменяем файл /etc/apache2/sites-enabled/000-default.conf, отвечающий за виртуальный хост по умолчанию для HTTP запросов. В этот файл добавляем директиву

Redirect / https://example.com/

При этом все настройки директорий можно удалить, поскольку по HTTP на ваши сайты всё равно будет не попасть.

Всё, теперь ещё раз перезапустите Apache и убедитесь, что при заходе по HTTP вы автоматически перенаправляетесь на HTTPS страницу.

sudo service apache2 restart

Если Вы используете .htaccess

Использовать файл - .htaccess не рекомендуется на  больших сайтах т.к. он замедляет доступ к сайту
301 редирект с протокола http на https в Apache

Добавьте следующий код в файл .htaccess вашего сайта:

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Проверка настройки https

Настройка автоматического обновления SSL-сертификатов с помощью планировщика cron

Как продлить сертификат? Сертификат выдается на 3 месяца, поэтому за несколько дней до окончания его необходимо продлить.

Для продления сертификата необходимо выполнить команду:

./letsencrypt-auto renew

Эту команду вы можете добавить в крон таб, для автоматического продления SSL сертификата.

Дополнительно

Для того чтобы получить зеленый замочек в адресной строке, который будет указывать пользователю что сайт правильно работает по протоколу HTTPS, необходимо все пути к подключаемым файлам (картинкам, css, js, ...) поменять с http на https. Так же можно вместо http или https поставить два слеша (//). Например:

<link rel="stylesheet" type="text/css" href="http://devreadwrite.com/style.css" />

заменить на:

<link rel="stylesheet" type="text/css" href="//devreadwrite.com/style.css" />

В таком случае файл будет получен по тому же протаколу в каком был запрошен сайт, в нашем случае https. Или же указать протокол явно.

<link rel="stylesheet" type="text/css" href="https://devreadwrite.com/style.css" />

По такому же принципу можно делать и ссылке на сайте.

Плюсы и минусы данного способа создания сертификата

Один и самый большой плюс данного способа - это создание сертификата без танцев с бубном. Существует множество других способов, но этот единственный, который заработал сразу.

Минус данного способа создания SSL сертификата заключается в том, что для создания сертификата необходимо остановит Nginx, следовательно сайты на Nginx во время создания сертификата не будут работать, это примерно 5-10 секунд (по крайней мере на моем сервере).

Ссылки


Яндекс | Картинки | Видео | Карты | Карты ОСМ | Спутник | Гугл | Вольфрам-Альфа | РуВики | EnWiki